package ar.com.larreta.vista.client;

import java.util.Map;

import ar.com.larreta.controlador.client.Invocador;
import ar.com.larreta.intercambio.client.PedidoDeLista;

import com.extjs.gxt.ui.client.data.BaseListLoadConfig;
import com.extjs.gxt.ui.client.data.DataReader;
import com.extjs.gxt.ui.client.data.RpcProxy;
import com.google.gwt.user.client.rpc.AsyncCallback;

public class ListaDesplegableProxy extends RpcProxy {

	private PedidoDeLista pedido;
	private String nombreLista;
	private ListaDesplegable listaDesplegable;

	public void setListaDesplegable(ListaDesplegable listaDesplegable) {
		this.listaDesplegable = listaDesplegable;
	}

	public ListaDesplegableProxy(PedidoDeLista pedido, String nombreLista) {
		super();
		this.pedido = pedido;
		this.nombreLista = nombreLista;
	}

	@Override
	protected void load(Object loadConfig, AsyncCallback callback) {
		BaseListLoadConfig config = (BaseListLoadConfig) loadConfig;
		RetornoListaDesplegable retorno = new RetornoListaDesplegable(listaDesplegable);
		retorno.agregar(callback);
		listaDesplegable.getCampoDesplegable().mask();
		Invocador.invocar(pedido, retorno); 
	}

	@Override
	public void load(final DataReader reader, final Object loadConfig, final AsyncCallback callback) {
		load(loadConfig, new AsyncCallback() {

			public void onFailure(Throwable caught) {
				callback.onFailure(caught);
			}

			@SuppressWarnings("unchecked")
			public void onSuccess(Object result) {
				try {
					Map data = null;
					if (reader != null) {
						data = (Map) reader.read(loadConfig, result);
					} else {
						data = (Map) result;
					}
					callback.onSuccess(data.get(nombreLista));
				} catch (Exception e) {
					callback.onFailure(e);
				}
			}

		});
	}

	public PedidoDeLista getPedido() {
		return pedido;
	}

}
